package br.com.iswe.gwt.ui.client.menu;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Hyperlink;

public class ItemMenu {
	
	//Estrutrura
	private ItemMenu pai = null;
	private List filhos = new ArrayList();
	private Map indexedFilhos = new HashMap(); 
	//Propriedades
	private String texto;
	private String name;
	private ClickListener listener;
	//Objetos Visuais
	private Hyperlink link = null;
	private FlexTable tbFilhos = null;
	private FlexTable tabela = null;
	private int row;
	private boolean setuped = false;
	
	private boolean internalVisible = true;
	
	
	
	public void setup(){
		setuped = true;
		
		setVisible(internalVisible);
	}
	
	public void setVisible(boolean value){
		if( setuped ){
			tabela.getRowFormatter().setVisible(row, value);
			//verifica se possui filhos
			if(filhos.size() > 0){//Aplica para a linha dos filhos tb.
				tabela.getRowFormatter().setVisible(row + 1, value);
				tabela.getRowFormatter().setVisible(row + 2, value);//altera tb o estado do separador..
			}
			else{
				if(pai == null){
					//caso seja um subitem
					tabela.getRowFormatter().setVisible(row  + 1, value);//altera tb o estado do separador..
				}
			}
		}
		else{
			
			internalVisible = value;
			
		}
	}
	
	public List getFilhos() {
		return filhos;
	}
	public void setFilhos(List filhos) {
		this.filhos = filhos;
	}
	
	public ItemMenu getPai() {
		return pai;
	}
	public void setPai(ItemMenu pai) {
		this.pai = pai;
	}
	
	public void setTexto(String texto) {
		this.texto = texto;
	}
	public ClickListener getListener() {
		return listener;
	}
	public void setListener(ClickListener listener) {
		this.listener = listener;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTexto() {
		return texto;
	}
	public Hyperlink getLink() {
		return link;
	}
	public void setLink(Hyperlink link) {
		this.link = link;
	}
	public int getRow() {
		return row;
	}
	public void setRow(int row) {
		this.row = row;
	}
	public FlexTable getTbFilhos() {
		return tbFilhos;
	}
	public void setTbFilhos(FlexTable tbFilhos) {
		this.tbFilhos = tbFilhos;
	}
	public FlexTable getTabela() {
		return tabela;
	}
	public void setTabela(FlexTable tabela) {
		this.tabela = tabela;
	}

	public void add(ItemMenu filho) {
		filhos.add(filho);
		indexedFilhos.put(filho.getName(), filho);
	}
	
	public ItemMenu getItemByName(String name){
		return (ItemMenu)indexedFilhos.get(name);
	}
	
}
